package com.edu.exam.enums.quality.monitoring;

/**
 * 通知类型枚举
 * 
 * <p>定义质量监控系统中的通知类型分类。</p>
 * 
 * @author 系统生成
 * @version 1.0
 * @since 2025-11-10
 */
public enum NotificationType {
    
    /**
     * 任务分配
     * <p>任务分配相关的通知。</p>
     */
    TASK_ASSIGNED("任务分配", "任务分配相关的通知"),
    
    /**
     * 任务提醒
     * <p>任务提醒相关的通知。</p>
     */
    TASK_REMINDER("任务提醒", "任务提醒相关的通知"),
    
    /**
     * 任务完成
     * <p>任务完成相关的通知。</p>
     */
    TASK_COMPLETED("任务完成", "任务完成相关的通知"),
    
    /**
     * 任务延期
     * <p>任务延期相关的通知。</p>
     */
    TASK_DELAYED("任务延期", "任务延期相关的通知"),
    
    /**
     * 任务取消
     * <p>任务取消相关的通知。</p>
     */
    TASK_CANCELLED("任务取消", "任务取消相关的通知"),
    
    /**
     * 系统提醒
     * <p>系统自动生成的提醒通知。</p>
     */
    SYSTEM_REMINDER("系统提醒", "系统自动生成的提醒通知"),
    
    /**
     * 紧急通知
     * <p>紧急情况下的通知。</p>
     */
    URGENT_NOTIFICATION("紧急通知", "紧急情况下的通知"),
    
    /**
     * 常规通知
     * <p>常规性的通知。</p>
     */
    REGULAR_NOTIFICATION("常规通知", "常规性的通知");
    
    private final String displayName;
    private final String description;
    
    NotificationType(String displayName, String description) {
        this.displayName = displayName;
        this.description = description;
    }
    
    public String getDisplayName() {
        return displayName;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据显示名称获取枚举
     * 
     * @param displayName 显示名称
     * @return 对应的枚举值
     */
    public static NotificationType fromDisplayName(String displayName) {
        for (NotificationType type : values()) {
            if (type.getDisplayName().equals(displayName)) {
                return type;
            }
        }
        return REGULAR_NOTIFICATION;
    }
    
    /**
     * 判断是否为任务相关通知
     * 
     * @return 如果是任务相关通知返回true
     */
    public boolean isTaskRelated() {
        return this == TASK_ASSIGNED || this == TASK_REMINDER || 
               this == TASK_COMPLETED || this == TASK_DELAYED || 
               this == TASK_CANCELLED;
    }
    
    /**
     * 判断是否为紧急通知
     * 
     * @return 如果是紧急通知返回true
     */
    public boolean isUrgent() {
        return this == URGENT_NOTIFICATION;
    }
}